package com.haidechizi.i18n.code.generator.common.message.config;

import com.haidechizi.i18n.code.generator.common.message.generator.GeneratorHelper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = GeneratorProperties.I18N_CODE_GENERATOR_PREFIX)
public class GeneratorProperties implements InitializingBean {

    public static final String I18N_CODE_GENERATOR_PREFIX = "i18n.code.generator";

    /**
     * 默认的文件编码
     */
    private String defaultCharset = "utf-8";


    //\"([\u4e00-\u9FA5\\pP]+)\"
//    @Value("#{'${i18n.regex:}'.split(',')}")
//    private Set<String> regexList = new HashSet<>();
    /**
     * 替换中文的正则表达式
     * key  整数，排序，值越小，越早进行匹配
     * value 替换中文的正则
     */
    private Map<Integer, String> regexMap = new HashMap<>();


    //    @Value("${i18n.note.regex:}")
    /**
     * 注释的正则表达式
     */
    private Set<String> noteRegexList = new HashSet<>();


    /**
     * 没枚举是否使用类名+对象名生成key
     */
    private boolean enumKey = false;

    /**
     * key生成使用的方法
     */
    private String keyGeneratorName = "";

    /**
     * 简繁互换是否使用本地的方式生成
     */
    private boolean zhUseLocal = true;

    /**
     * 翻译的appCode
     */
    private String erAiAppCode;

    private String yeeCloudMtAppCode;

    private String cacheFilePath = this.getClass().getResource("/").getPath();

    private String i18nFileBasePath = this.getClass().getResource("/").getPath();


    @Override
    public void afterPropertiesSet() throws Exception {

        List<String> sortList = regexMap.entrySet().stream().sorted(Comparator.comparingInt(Map.Entry::getKey)).map(regex -> regex.getValue()).collect(Collectors.toList());
        GeneratorHelper.setRegexList(sortList);


        // 系统内置的正则表达式
//        regexList.remove("");
//        regexList.add("\"([\u4e00-\u9FA5\\pP]+)\"");
//        regexList.add("'([\u4e00-\u9FA5\\pP]+)'");
//        regexList.add("([\u4e00-\u9FA5]+)");
        // 系统内置的注释正则表达式
//        noteRegexList.remove("");
//        noteRegexList.add("\\/\\/[^\\n]*");
//        noteRegexList.add("\\/\\*(\\s|.)*?\\*\\/");
//        noteRegexList.add("<!--(\\s|.)*?-->");
    }
}
